import numpy as np
%matplotlib notebook
import matplotlib.pyplot as plt
import ipywidgets as widgets
from maux import *
hide_interactive_toolbars()
# interaktívny editor pre vyšetrovanie priebehu elementárnych funkcií
from jedit import editor
np.warnings.filterwarnings('ignore', category=np.VisibleDeprecationWarning)
# nastavenie jazyka
from locale import setlocale, LC_ALL
from platform import uname
if uname()[0] == 'Linux':
setlocale(LC_ALL, 'sk_SK.utf8')
else:
setlocale(LC_ALL, 'sk_SK')
plt.rcParams["axes.formatter.use_locale"] = True
Logaritmická funkcia je určená rovnicou $$y = \log_a x,$$ kde $a > 0, a \ne 1$ je pevne zvolené reálne číslo. Definičným oborom je množina kladných reálnych čísel. Je to inverzná funkcia k exponenciálnej funkcii $a^x$: $$ \forall x \in (0, +\infty) \, \forall y \in R{:}\ \log_a x = y \leftrightarrow a^y = x . $$ Všimnime si, že platí $$ \forall x \in (0, +\infty){:}\ a^{\log_a x} = x $$ $$ \forall y \in R{:}\ \log_a a^y = y . $$ Prirodzený logaritmus zapisujeme takto $$\ln x \equiv \log_{\textrm{e}} x.$$ Všimnime si, že platí $$\log_a x = \frac{\ln x}{\ln a}.$$
Ďalšie informácie:
Dokumentácia:
Nakreslenie grafu logaritmickej funkcie danej rovnicou $$y = \ln x.$$ Definičným oborom je množina kladných reálnych čísel. Je to inverzná funkcia k exponenciálnej funkcii $\mathrm{e}^x$: $$ \forall x \in (0, +\infty) \, \forall y \in R{:}\ \ln x = y \leftrightarrow \mathrm{e}^y = x . $$ Všimnime si, že platí $$ \forall x \in (0, +\infty){:}\ \mathrm{e}^{\ln x} = x $$ $$ \forall y \in R{:}\ \ln \mathrm{e}^y = y . $$
#####
##### nakreslenie grafu funkcie
#####
N = 5
#### vstupné údaje
def f(X): return np.e ** X # ufunc verzia exponeciálnej funkcie
X1 = np.linspace(-N, N, 2*N*10+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
Y1 = f(X1) # odpovedajúce hodnoty závislej premennej
def g(X): return X # ufunc verzia pre os súmernosti
X2 = np.linspace(-N, N, 2*N*10+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
Y2 = g(X2) # odpovedajúce hodnoty závislej premennej
def h(X): return np.log(X) # ufunc verzia funkcie logartmickej funkcie
X3 = np.linspace(0, N, N*1000+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X3 = X3[X3 != 0] # číslo 0 nepatrí do oboru definície
Y3 = h(X3) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 9) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Prirodzený logaritmus") # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
ax.set_ylim(-N*1.1, N*1.1)
ax.set_xticks(range(-N, N+1)) # kótovanie x-ovej osi
ax.set_yticks(range(-N, N+1)) # kótovanie y-ovej osi
## graf funkcie
ax.plot(X1, Y1, label=r"exponenciálna funkcia $y = \mathrm{e}^x$")
## os súmernosti
ax.plot(X2, Y2, 'k--', lw=1, label=r"os súmernosti")
## graf inverznej funkcie
ax.plot(X3, Y3, label=r"logaritmická funkcia $y = \ln\,x$")
## legenda
ax.legend()
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
Nakreslenie grafov logaritmických funkcií $$y = \log_a x$$ pre $a = \frac{1}{4}, \frac{1}{3}, \frac{1}{2}, 2, 3, 4$ do jedného obrázka.
#####
##### grafy parametrického systému funkcií
#####
#### vstupné údaje
def f(X, a): return np.log(X) / np.log(a)
X = np.linspace(0, 10, 10*1000+1)
X = X[X != 0]
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 7.5)
### diagram
init_subplot(ax)
ax.set_title(r"Grafy logaritmických funkcií $y = \log_a\,x$")
ax.set_aspect('equal')
# ax.grid()
ax.set_ylim(-4.4, 4.4)
ax.set_xticks(range(0, 10+1))
for a in [1/4, 1/3, 1/2, 2, 3, 4]:
ax.plot(X, f(X, a), label=r"$a = {:.2g}$".format(a))
## legenda
ax.legend()
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
To isté ako v predchadzajúcom príklade, len vykreslenie sa deje pomocou interaktívnych prvkov knižnice ipywidgets
.
#####
##### grafy parametrického systému funkcií (interaktívna verzia)
#####
#### vstupné údaje
def f(X, a): return np.log(X) / np.log(a)
X = np.linspace(0, 10, 10*1000+1)
X = X[X != 0]
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 7.5)
### diagram
init_subplot(ax)
ax.set_aspect('equal')
# ax.grid()
ax.set_ylim(-4.4, 4.4)
ax.set_xticks(range(0, 10+1))
## graf funkcie y = logₐx
def plot_graph(a):
ax.set_title(r"Graf logaritmickej funkcie $y = \log_{{{0}}}\,x$".format(a))
if ax.lines:
ax.lines[0].set_ydata(f(X, a))
else:
ax.plot(X, f(X, a))
widgets.interact(plot_graph,
a=widgets.SelectionSlider(options=[1/4, 1/3, 1/2, 2, 3, 4], value=2)
)
### samotné zobrazenie
fig.show()
interactive(children=(SelectionSlider(description='a', index=3, options=(0.25, 0.3333333333333333, 0.5, 2, 3, …
V nasledujúcich príkladoch budeme kresliť grafy a vyšetrovať priebeh logaritmických funkcií. Pretože tieto funkcie majú neohraničený definičný obor, budeme pri zostrojovaní grafu každej takejto funkcie vykreslovať len jej zaujímavú časť. Pri vyšetrovani priebehu týchto funkcií treba určiť:
Preferujeme algebraickú metódu pri hľadaní význačných bodov. Súradnice význačných bodov, ktoré sú zrejmé z grafu, netreba explicitne uvádzať.
Doporučujeme rozdeliť riešenie do dvoch častí:
#####
##### šablóna riešenia (nakreslenie grafu a vyšetrenie priebehu funkcie)
#####
#### vstupné údaje
# def f(X): return None # ufunc verzia funkcie
# X = np.linspace(None, None, None+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
# Y = f(X) # odpovedajúce hodnoty závislej premennej
# X1, X2 = X[X < None], X[X > None] # číslo None nepatrí do oboru definície
# Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
# fig, ax = plt.subplots()
# fig.set_size_inches(6, 4) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
# init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
# ax.set_title(r"Graf a priebeh funkcie $y = \cdots$") # pomenovanie diagramu
# ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
## x-ová os
# ax.set_xlim(None, None) # ohraničenie hodnôt pre os x
# ax.set_xticks(np.linspace(None, None, None+1)) # kótovanie x-ovej osi
## y-ová os
# ax.set_ylim(None, None) # ohraničenie hodnôt pre os y
# ax.set_yticks(None) # kótovanie y-ovej osi
## graf funkcie
# ax.plot(X, Y)
# color = ax.plot([], [])[0].get_color()
# ax.plot(X1, Y1, c=color)
# ax.plot(X2, Y2, c=color)
## nulové body funkcie
# ax.plot(None, 0, 'kx', label=r"nulový bod $?$")
## x-ové súradnice extrémov funkcie vrátane krajných bodov základného intervalu
# ps = [X[0], None, X[-1]]
# ps = [X1[0], None, X1[-1], X2[0], None, X2[-1]]
## extrémy funkcie
# ax.plot(ps[None], f(ps[None]), 'o', label=r"extrém v bode $?$")
## intervaly, na ktorých je funkcia rastúca
# color = ax.plot([], [], label=r"rastúca")[0].get_color()
# for i in None:
# I = X[(ps[i] <= X) & (X <= ps[i+1])]
# ax.plot(I, f(I), c=color)
## intervaly, na ktorých je funkcia klesajúca
# color = ax.plot([], [], label=r"klesajúca")[0].get_color()
# for i in None:
# I = X[(ps[i] <= X) & (X <= ps[i+1])]
# ax.plot(I, f(I), c=color)
## asymptota bez smernice
# Ay = np.linspace(None, None, None+1)
# Ax = None * np.ones(len(Ay))
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota bez smernice v bode $?$")
## asymptota so smernicou
# Ax = X
# Ay = None * np.ones(len(Ax)) + None
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou $?x+?y+? = 0$ v bode $\pm\infty$")
## legenda
# ax.legend()
# ax.legend(loc='center') # umiestenie v strede diagramu
# ax.legend(loc=(None, None)) # ľavý dolný roh legendy má súradnice (None, None)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
# fig.show()
#### editor
# editor(figure=fig, axes=ax, function=f, intervals=[X])
# editor(figure=fig, axes=ax, function=f, intervals=[X1, X2])
Nakreslite grafy a vyšetrite priebeh týchto funkcií \begin{align*} y & = \ln(x^3) \\ y & = \log_{10}(100x^4) . \end{align*}
Zostrojte inverznú funkciu k funkcii $$y = 5 - \mathrm{e}^{1/x},\ x > 0.$$ Overte graficky, že riešenie je správne.
#####
#### šablóna riešenia
#####
### zadanie
fig, ax = plt.subplots()
fig.set_size_inches(9, 9)
init_subplot(ax)
ax.set_title(r"Inverzná funkcia")
ax.set_aspect('equal')
# ax.grid()
ax.set_xlim(-4.5, 8.5)
ax.set_ylim(-4.5, 8.5)
ax.set_xticks(range(-4, 8+1))
ax.set_yticks(range(-4, 8+1))
X = np.linspace(-4, 8, 12*100+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
def f(X): return 5 - np.e ** (1 / X)
X1 = X[X > 0]
ax.plot(X1, f(X1), label=r"funkcia $y = 5 - \mathrm{e}^{1/x},\ x > 0$")
def g(X): return X
X2 = X
ax.plot(X2, g(X2), 'k--', lw=1, label=r"os súmernosti")
## riešenie (toto upravte)
# def h(X): return None # ufunc verzia inverznej funkcie
# X3 = None # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
# ax.plot(X3, h(X3), label=r"inverzná funkcia $y = \ldots$")
## legenda
ax.legend()
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
Zostrojte inverznú funkciu k funkcii $$y = \frac{3\mathrm{e}^x - 2}{2\mathrm{e}^x + 1}.$$ Overte graficky, že riešenie je správne.
Zostrojte inverznú funkciu k funkcii $$y = \frac{6\mathrm{e}^x}{1+\mathrm{e}^{2x}},\ x \geq 0.$$ Overte graficky, že riešenie je správne.
Nakreslenie grafu funkcie $$y = \frac{\ln(1+x)}{x}.$$ Definičným oborom je množina pozostávajúca zo všetkých reálnych čísel $x > -1$ rôznych od $0$.
#####
##### nakreslenie grafu funkcie
#####
def f(X): return np.log(1 + X) / X # ufunc verzia funkcie
X = np.linspace(-1, 6, 9*1000+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2 = X[(-1 < X) & (X < 0)], X[X > 0] # číslo 0 nepatrí do oboru definície
Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 8) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Graf funkcie $y = \dfrac{\ln(1+x)}{x}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
ax.set_ylim(-1.5, 5.5) # ohraničenie hodnôt pre os y
## graf funkcie
color = ax.plot([], [])[0].get_color()
ax.plot(X1, Y1, c=color)
ax.plot(X2, Y2, c=color)
ax.plot(0, 1, 'o', c=color, mfc='w') # číslo 0 nepatrí do oboru definície
## asymptota bez smernice
Ay = np.linspace(-1.5, 5.5, 7*10+1)
Ax = np.ones(len(Ay)) * (-1)
ax.plot(Ax, Ay, '--', lw=1, zorder=1)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
#### editor
# editor(figure=fig, axes=ax, function=f, intervals=[X1, X2])